﻿using System;
using System.Drawing;
using System.Windows.Forms;

namespace CLM.Gestao.Despesas.UI
{
    public partial class SincronizarOutrasDespesas : Form
    {
        #region Propriedades e Variáveis

        #endregion Propriedades e Variáveis

        #region Construtor

        public SincronizarOutrasDespesas(int pAno, int pMes)
        {
            try
            {
                InitializeComponent();

                var pos = this.PointToScreen(lblTitulo.Location);
                pos = picTitulo.PointToClient(pos);
                lblTitulo.Parent = picTitulo;
                lblTitulo.Location = pos;
                lblTitulo.BackColor = Color.Transparent;

                InicializaCombos(pAno, pMes);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public SincronizarOutrasDespesas()
        {
            try
            {
                InitializeComponent();
                throw new Exception("O período deve ser informado!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Contrutor

        #region Eventos
        
        private void btnSincronizarDespesa_Click(object sender, EventArgs e)
        {
            try
            {
                ValidarInterface();
                Sincronizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void SincronizarDespesa_OnImportData(object sender, Importacao.ImportDataEventArgs e)
        {
            if (e.Tipo == Importacao.ImportDataEventArgs.type.Processo)
            {
                pgbProgresso.Maximum = e.Total;
                pgbProgresso.Value = e.Atual;

                lblMensagem.Text = String.Format("{0} - {1} de {2}", e.Mensagem, e.Atual, e.Total);
            }
            else
                lblMensagem.Text = String.Format("{0}", e.Mensagem);

            Application.DoEvents();
        }

        #endregion Eventos

        #region Métodos Privados

        private void InicializaCombos(int pAno, int pMes)
        {
            // Carrega o combo de Período
            Administrador.BLL.Periodo Periodo = new Administrador.BLL.Periodo();
            cboPeriodo.DataSource = Periodo.GetItens(new Administrador.BLL.Periodo.Lista() { AnoPeriodo = pAno });
            cboPeriodo.DisplayMember = "DescricaoPeriodo";
            cboPeriodo.ValueMember = "MesPeriodo";

            cboPeriodo.SelectedValue = pMes;
        }

        private void ValidarInterface()
        {
            if (string.IsNullOrWhiteSpace(cboPeriodo.Text)) throw new Exception("O período é obrigatório.");
        }

        private void Sincronizar()
        {
            try
            {
                BLL.Despesa Despesa = new BLL.Despesa();
                Despesa.OnImportData += new Importacao.ImportDataEventHandler(SincronizarDespesa_OnImportData);

                Administrador.BLL.Periodo.Itens Periodo = new Administrador.BLL.Periodo.Itens();
                Periodo = (Administrador.BLL.Periodo.Itens)cboPeriodo.SelectedItem;
                Despesa.SincronizarOutrasDespesas((int)Periodo.MesPeriodo,(int)Periodo.AnoPeriodo);

                Despesa.OnImportData -= new Importacao.ImportDataEventHandler(SincronizarDespesa_OnImportData);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        #endregion Métodos Públicos
    }
}